/**
 * 图书馆首页交互功能
 */

$(document).ready(function() {
    // 初始化所有功能
    initSearchFeatures();
    initTabFeatures();
    initCampusData();
    initAnimationEffects();
    initCountUpNumbers();
    initLazyLoadImages();
});

/**
 * 搜索功能初始化
 */
function initSearchFeatures() {
    // 搜索类型切换
    $('[data-search-type]').on('click', function() {
        const searchType = $(this).data('search-type');

        // 更新按钮状态
        $('[data-search-type]').removeClass('active');
        $(this).addClass('active');

        // 更新搜索框占位符
        const searchInput = $('.search-input');
        const placeholders = {
            'all': '输入检索词...',
            'chinese': '输入中文检索词...',
            'foreign': '输入外文检索词...'
        };
        searchInput.attr('placeholder', placeholders[searchType] || placeholders['all']);

        // 存储搜索类型到本地存储
        localStorage.setItem('preferredSearchType', searchType);
    });

    // 恢复上次搜索类型
    const preferredSearchType = localStorage.getItem('preferredSearchType') || 'all';
    $(`[data-search-type="${preferredSearchType}"]`).click();

    // 搜索字段切换
    $('select[name="searchField"]').on('change', function() {
        const field = $(this).val();
        const searchInput = $('.search-input');
        const fieldLabels = {
            'all': '全部字段',
            'title': '标题',
            'author': '作者',
            'keyword': '关键词',
            'abstract': '摘要'
        };

        // 可以根据选择的字段更新搜索提示
        console.log('搜索字段切换到：', fieldLabels[field]);
    });

    // 搜索表单提交验证
    $('.search-form').on('submit', function(e) {
        const searchInput = $('.search-input').val().trim();
        if (!searchInput) {
            e.preventDefault();
            alert('请输入检索词');
            $('.search-input').focus();
            return false;
        }
    });
}

/**
 * 标签页功能初始化
 */
function initTabFeatures() {
    // 内容标签页切换效果
    $('#contentTabs .nav-link').on('click', function(e) {
        const target = $(this).attr('href');

        // 添加加载动画
        $(target).addClass('loading');

        // 模拟内容加载
        setTimeout(function() {
            $(target).removeClass('loading');
        }, 300);
    });

    // 数据库标签页切换效果
    $('#databaseTabs .nav-link').on('click', function(e) {
        const target = $(this).attr('href');
        const databaseGrid = $(target).find('.database-grid');

        // 添加渐入动画
        databaseGrid.css('opacity', '0');

        setTimeout(function() {
            databaseGrid.css('transition', 'opacity 0.5s ease');
            databaseGrid.css('opacity', '1');
        }, 100);
    });
}

/**
 * 校区数据初始化
 */
function initCampusData() {
    // 模拟实时数据更新
    setInterval(updateCampusData, 30000); // 每30秒更新一次

    // 校区卡片点击效果
    $('.campus-card').on('click', function() {
        const campusName = $(this).find('h4').text();
        console.log('点击了校区：', campusName);

        // 可以添加跳转到校区详情页的逻辑
        // window.location.href = `/campus/${encodeURIComponent(campusName)}`;
    });
}

/**
 * 更新校区数据
 */
function updateCampusData() {
    // 模拟数据变化
    $('.campus-stats .stat-number').each(function() {
        const currentValue = parseInt($(this).text().replace(/,/g, ''));
        const change = Math.floor(Math.random() * 10) - 5; // -5 到 +5 的随机变化
        const newValue = Math.max(0, currentValue + change);

        // 添加更新动画
        $(this).addClass('updating');

        setTimeout(() => {
            $(this).text(newValue.toLocaleString());
            $(this).removeClass('updating');
        }, 500);
    });
}

/**
 * 动画效果初始化
 */
function initAnimationEffects() {
    // 滚动显示动画
    const observerOptions = {
        threshold: 0.1,
        rootMargin: '0px 0px -50px 0px'
    };

    const observer = new IntersectionObserver(function(entries) {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                $(entry.target).addClass('animate-in');
                observer.unobserve(entry.target);
            }
        });
    }, observerOptions);

    // 观察需要动画的元素
    $('.library-functions, .library-tabs, .library-campus-info, .library-databases, .library-branches').each(function() {
        observer.observe(this);
    });

    // 鼠标悬停效果
    $('.function-item, .database-item, .branch-item, .party-item').on('mouseenter', function() {
        $(this).addClass('hover-effect');
    }).on('mouseleave', function() {
        $(this).removeClass('hover-effect');
    });
}

/**
 * 数字递增动画
 */
function initCountUpNumbers() {
    const observer = new IntersectionObserver(function(entries) {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                animateNumbers($(entry.target));
                observer.unobserve(entry.target);
            }
        });
    });

    $('.stat-value, .campus-stats .stat-number').each(function() {
        observer.observe(this);
    });
}

/**
 * 数字动画效果
 */
function animateNumbers($element) {
    const finalNumber = $element.text().replace(/,/g, '');
    const isDecimal = finalNumber.includes('.');
    const finalValue = parseFloat(finalNumber);

    if (isNaN(finalValue)) return;

    const duration = 2000;
    const steps = 60;
    const increment = finalValue / steps;
    let current = 0;

    const timer = setInterval(function() {
        current += increment;
        if (current >= finalValue) {
            current = finalValue;
            clearInterval(timer);
        }

        if (isDecimal) {
            $element.text(current.toFixed(1));
        } else {
            $element.text(Math.floor(current).toLocaleString());
        }
    }, duration / steps);
}

/**
 * 图片懒加载
 */
function initLazyLoadImages() {
    const imageObserver = new IntersectionObserver(function(entries) {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                const img = entry.target;
                img.src = img.dataset.src;
                img.classList.remove('lazy');
                imageObserver.unobserve(img);
            }
        });
    });

    $('img[data-src]').each(function() {
        imageObserver.observe(this);
    });
}

/**
 * 回到顶部功能
 */
function scrollToTop() {
    $('html, body').animate({
        scrollTop: 0
    }, 800);
}

/**
 * 显示/隐藏回到顶部按钮
 */
$(window).on('scroll', function() {
    const scrollTop = $(window).scrollTop();
    const backToTopBtn = $('.back-to-top');

    if (scrollTop > 300) {
        backToTopBtn.fadeIn(300);
    } else {
        backToTopBtn.fadeOut(300);
    }
});

/**
 * 工具栏功能
 */
$('.toolbar-item').on('click', function(e) {
    if ($(this).hasClass('back-to-top')) {
        e.preventDefault();
        scrollToTop();
    }
});

/**
 * 数据库资源链接处理
 */
$('.database-link').on('click', function(e) {
    // 这里可以添加数据库访问统计
    const databaseName = $(this).find('.database-name').text();
    console.log('访问数据库：', databaseName);

    // 可以发送访问统计到服务器
    // $.post('/api/database/visit', { name: databaseName });
});

/**
 * 分馆链接处理
 */
$('.branch-link').on('click', function(e) {
    // 这里可以添加分馆访问统计
    const branchName = $(this).find('h5').text();
    console.log('访问分馆：', branchName);

    // 可以发送访问统计到服务器
    // $.post('/api/branch/visit', { name: branchName });
});

/**
 * 功能快捷入口统计
 */
$('.function-item').on('click', function() {
    const functionName = $(this).find('span').text();
    console.log('使用功能：', functionName);

    // 可以发送使用统计到服务器
    // $.post('/api/function/usage', { name: functionName });
});

/**
 * 表单验证
 */
function validateForm(form) {
    const $form = $(form);
    let isValid = true;

    $form.find('input[required], textarea[required], select[required]').each(function() {
        if (!$(this).val().trim()) {
            $(this).addClass('is-invalid');
            isValid = false;
        } else {
            $(this).removeClass('is-invalid');
        }
    });

    return isValid;
}

/**
 * 显示加载状态
 */
function showLoading($element, message = '加载中...') {
    $element.addClass('loading');
    if (!$element.find('.loading-overlay').length) {
        $element.append(`<div class="loading-overlay"><div class="spinner"></div><div>${message}</div></div>`);
    }
}

/**
 * 隐藏加载状态
 */
function hideLoading($element) {
    $element.removeClass('loading');
    $element.find('.loading-overlay').remove();
}

/**
 * 错误处理
 */
window.addEventListener('error', function(e) {
    console.error('页面错误：', e.error);

    // 可以添加错误上报逻辑
    // $.post('/api/error/report', {
    //     message: e.error.message,
    //     stack: e.error.stack,
    //     url: window.location.href
    // });
});

/**
 * 性能监控
 */
window.addEventListener('load', function() {
    const loadTime = performance.now();
    console.log('页面加载时间：', loadTime.toFixed(2) + 'ms');

    // 可以发送性能数据到服务器
    // $.post('/api/performance', { loadTime: loadTime });
});

/**
 * 键盘快捷键
 */
$(document).on('keydown', function(e) {
    // Ctrl/Cmd + K 打开搜索
    if ((e.ctrlKey || e.metaKey) && e.key === 'k') {
        e.preventDefault();
        $('.search-input').focus();
    }

    // ESC 关闭搜索框焦点
    if (e.key === 'Escape') {
        $('.search-input').blur();
    }
});


/**
 * 移动端适配
 */
if (window.innerWidth <= 767) {
    // 移动端触摸优化
    $('.function-item, .database-item, .branch-item').on('touchstart', function() {
        $(this).addClass('touch-active');
    }).on('touchend', function() {
        $(this).removeClass('touch-active');
    });
}

/**
 * 工具函数
 */
const LibraryUtils = {
    // 格式化数字
    formatNumber: function(num) {
        return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
    },

    // 获取随机颜色
    getRandomColor: function() {
        const colors = ['#667eea', '#764ba2', '#f093fb', '#f5576c', '#4facfe', '#00f2fe'];
        return colors[Math.floor(Math.random() * colors.length)];
    },

    // 防抖函数
    debounce: function(func, wait) {
        let timeout;
        return function executedFunction(...args) {
            const later = () => {
                clearTimeout(timeout);
                func(...args);
            };
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
        };
    },

    // 节流函数
    throttle: function(func, limit) {
        let inThrottle;
        return function() {
            const args = arguments;
            const context = this;
            if (!inThrottle) {
                func.apply(context, args);
                inThrottle = true;
                setTimeout(() => inThrottle = false, limit);
            }
        };
    }
};

// 导出到全局
window.LibraryUtils = LibraryUtils;